﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace GameVLTK
{
    public class Production : VisibleGameEntity
    {
        private ContentManager Content;
        private string Path;
        private int nTextures;
      
        /// <summary>
        /// Khởi tạo thông tin của vật phẩm
        /// </summary>
        public Production(ContentManager content, string path, int nTextures, String name)
        {
            //
            this.Content = content;
            this.Path = path;
            this.nTextures = nTextures;
            //

            this.Name = name;

            Texture2D[] textures;
            textures = new Texture2D[nTextures];

            int[] framSeq = new int[nTextures];
            for (int i = 0; i < nTextures; i++)
            {
                textures[i] = content.Load<Texture2D>(path + (i + 1).ToString("00"));
                framSeq[i] = i;
            }

            //Mỗi obj sẽ có một sprite gồm dãy các hình
            this.Sprites = new List<MySprite>();
            this.nSprites = 1;
            this.Size = new Vector2(textures[0].Width, textures[0].Height);
            
            //Khởi tạo sprite cho obj
            MySprite mySprite = new MySprite(textures, new Vector2(0,0));
            mySprite.FrameSequence = framSeq;

            this.Sprites.Add(mySprite);
        }

        public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            base.Draw(gameTime, spriteBatch);

            //Vẽ tên của vật phẩm
            Global.DrawName(spriteBatch, Name,
                            this.TopLeft, this.Size, Color.Black);
        }

        public override int OnEvent(Global.EVENTS eventID, object sender, object[] args)
        {
            int kq= 0;
            switch (eventID)
            {
                case Global.EVENTS.GM_PRODUCTION_CLICKED:
                    {
                        if (this == sender)
                        {
                            Map.Player.HP += 1;

                            Map.ForeGround.Remove(this);

                            Map.ProductionsManager.Productions.Remove(this);
                          
                            kq = 1;
                        }
                        break;
                    }
                case Global.EVENTS.GM_MAP_TOPLEFT_CHANGED:
                    {
                        this.TopLeft += (Vector2)args[0];
                        break;
                    }
                default:
                    break;
            }

            return kq;
        }

        /// <summary>
        /// Clone ra một sản phẩm
        /// </summary>
        /// <returns></returns>
        public override VisibleGameEntity Clone()
        {
            Production pro = new Production(this.Content, 
                                            this.Path, 
                                            this.nTextures, this.Name);
            return pro;
        }
    }
}
